/*
 * Copyright (c) 2021. Moses All Right Reserved
 */

package com.moses.inner_class;

import com.moses.design_patterns.template.B;

/**
 * @author Moses
 * @email shenhuohui@gmail.com
 * @date 2021/5/20 22:47
 */
public class Client {

    public static void main(String[] args) {
        // 内部类
        // 1. 静态内部类
        // 2. 非静态内部类（成员内部类）
        // 3. 局部内部类
        // 4. 匿名内部类

        // 在静态方法中，非静态内部类的实例化依赖于外部类，只有外部类实例化了才能实例化非静态内部类
        // 非静态内部类中可以像访问自己成员变量或方法一样访问外部类的成员变量和方法
        // Out.Inner inner = new Out().new Inner();

        // 静态内部类的实例需要加上外部类，它实例化不会引起外部类实例化，像普通类一样运行
        // 它与外部类的关系是静态内部类只是在外部类中定义，因此也与其他类区别在于，它能访问外部类的私有静态变量
        // 不会被编译成 Inner.class，而是 Out$Inner.class，其余与其他类无异
        Out.StaticInner staticInner =  new Out.StaticInner();
    }
}
